import {getSetting,chooseAddress,openSetting,showModal,showToast} from '../../utils/util'
import regeneratorRuntime from '../../lib/runtime/runtime.js'
// pages/cart/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },
//点击选择收货地址
async handleChooseAddress(){
  
  //获取用户的收货地址
  // wx.chooseAddress({
  //   success:(result)=>{
  //     console.log(result)
  //   }
  // })
  

  // 优化上面代码
  try{
    // 1.获取权限状态
    const res1 = await getSetting();
    const scopeAddress = res1.authSetting["scope.address"];
    // 2 判断权限状态
    if(scopeAddress == false){
      // 3 诱导用户打开授权页面
      await openSetting();
    }
    // 4 调用收货地址 api
    const address = await chooseAddress()
    address.all = address.provinceName+address.cityName+address.detailInfo
    wx.setStorageSync('address', address)
   
  }catch(e){
    console.log(e)
  }
  
},
// 商品选中
handleItemChange(e){
  // 获取商品id
  const goods_id = e.currentTarget.dataset.id
  // 获取购物车数组
  let {cart} = this.data
  // 找到被修改的商品对象
  let index = cart.findIndex(item=>{return item.goods_id === goods_id})
  cart[index].checked = !cart[index].checked
  this.setData({
    cart
  })
  this.setCart(cart)
},

// 设置购物车状态同时，重新计算
setCart(cart){
  wx.setStorageSync('cart', cart)
  let allChecked = true
  // 总价格 总数量
  let totalPrice=0
  let totalNum=0
  cart.forEach(item=>{
    if(item.checked){
      totalPrice += item.goods_price*item.num
      totalNum += item.num
    }else{
      allChecked = false
    }
  })
  // 判断数组是否为空 
  // 如果是空数组调用every 返回值就是true 因此需要检测数组长度判断
  allChecked = cart.length!=0?allChecked:false
  this.setData({
    cart,
    allChecked,
    totalPrice,
    totalNum
  })
},
handleAllChecked(){
  //获取data中的数据
  let {cart,allChecked} = this.data
  // 修改值
  allChecked = !allChecked
  cart.forEach(v=>{
    return v.checked = !v.checked
  })
  // 把修改好的值重新设置回data中
  this.setCart(cart)
 
},
// 商品数量改变
async handleItemNumEdit(e){
  // 获取事件传递过来的参数
  const {operation,id} = e.currentTarget.dataset
  // 获取购物车数组
  let {cart} = this.data
  // 找到需要修改的商品索引
  const index = cart.findIndex(v=>v.goods_id == id)
  //判断是否要执行删除
  if(cart[index].num === 1&& operation ===-1){
    // 弹窗提示
  const res = await showModal('title','是否要删除商品')
  
    if (res.confirm) {
      cart.splice(index,1)
      this.setCart(cart)
    } else if (res.cancel) {
      console.log('用户点击取消')
    }
    
  
  }else{
    cart[index].num += operation
    //设置会缓存和data
    this.setCart(cart)
  }

  
},
//点击 结算
async handlePay(){
  //判断 收货地址
  const {address,totalNum} = this.data
  if(!address.userName){
    await showToast({title:"你还没有选择收货地址"})
    return;
  }
  //判断用户有没有选购商品
  if(totalNum === 0){
    await showToast({title:"你还没有选中商品"})
    return
  }
  //跳转到支付页面
  wx.navigateTo({
    url: '/pages/pay/index',
  })
},
  onShow: function () {
    // 1 获取缓存中的收货地址
    const address = wx.getStorageSync('address')
    // 获取缓存中的购物车数据
    const cart = wx.getStorageSync('cart') || []
    // every 数组 接收一个函数参数 每一个回调函数都返回true那么every方法返回值为true 
    // 只要有一个回调函数返回false那么不再循环执行 直接返回false
   
    // const allChecked =cart.length?cart.every(item=>{
    //   return item.checked
    // }):false
    this.setCart(cart)
    this.setData({
      address,
    })
  },

 
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})